#include"ShareStack.h"
// InitStack
void InitShareStack(ShareStack& S) {
    if (S.top0 >= -1 || S.top1 < MaxSize) {
        return;
    }
    S.top0 = -1;
    S.top1 = MaxSize;
    // S.top0 in [-1, MaxSize - 1] == index's range 
    // S.top1 in [MaxSize, 0]
    // else S.top = 0 and S.top1 = MaxSize - 1
}

// ButtomStack push
bool PushButtom(ShareStack& S, ElemType x) {
    if (S.top1 - S.top0 == 1) {
        return false;
    }

    S.data[++S.top0] = x;
    return true;
}

// TopStack push
bool PushTop(ShareStack& S, ElemType x) {
    if (S.top1 - S.top0 == 1) {
        return false;
    }
    S.data[--S.top1] = x;
    return true;
}

// ButtomStack pop
bool PopButtom(ShareStack& S, ElemType& x) {
    if (S.top1 - S.top0 == 1) {
        return false;
    }

    S.data[++S.top0] = x;
    return true;
}

// TopStack Pop
bool PopTop(ShareStack& S, ElemType& x) {
    if (S.top1 - S.top0 == 1) {
        return false;
    }
    S.data[--S.top1] = x;
    return true;
}